package com.yiban.demo.Order.Service;

import com.yiban.demo.Order.Entity.OrderPO;
import com.yiban.demo.Order.Entity.OrderStatus;
import com.yiban.demo.Order.Entity.OrderVO;

import java.util.List;
import java.util.Optional;

public interface OrderService {
    OrderPO transToOrderPo(OrderVO orderVO);
    OrderVO transToOrderVo(OrderPO orderPO);

    /**
     * 从内存或者数据库获取订单
     * @param orderId 订单编号
     * @return 对应订单
     */
    Optional<OrderVO> getOrder(Long orderId);

    /**
     * 新建订单
     * @param orderVO 订单示例
     * @param userId 当前用户
     * @return 订单编号
     */
    Long addNewOrder(OrderVO orderVO, Integer userId);

    /**
     * 获取历史已完成订单
     * @param userId 用户编号
     * @param current 当前页数
     * @param size 每页容量
     * @return 订单信息
     */
    List<OrderVO> getHistoryOrder(Integer userId, int current, int size);

    /**
     * 更新内存或者数据库数据，优先内存
     * @param orderId 订单编号
     * @param orderStatus 订单状态
     * @return
     */
    boolean updateStatus(Long orderId, OrderStatus orderStatus);

    /**
     * 送货完毕
     * @param orderId 订单编号
     * @return 是否成功（订单是否存在之类的）
     */
    boolean endOrder(Long orderId);
    /**
     * 开始送货
     * @param orderId 订单编号
     * @return 是否成功（订单是否存在之类的）
     */
    boolean deliveryOrder(Long orderId, String deviceId);

    boolean receiveOrder(Long orderId);

    List<OrderVO> getNowUndoOrders();

    List<OrderVO> getNowUndoOrders(Integer stationId);

    List<OrderVO> getUserUndoOrder(Integer userId);
}
